﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE;
using Insifo.BE.Gen;
using Insifo.BE.Seg;
using Insifo.DL;
using Insifo.DL.Seg;
using Insifo.DL.Gen;
using Insifo.BL.Gen;

namespace Insifo.BL.Seg
{
    public class BLGrupo 
    {
        //Objeto transaccion
        DLTransactionMng _transaccion = null;

        //Instancias
        DLGrupo _dlGrupo = new DLGrupo();
        DLConcepto _dlConcepto = new DLConcepto();

        private DLGrupo _dl = new DLGrupo();

        /// <summary>
        /// Método extrae Companias por Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        
        public DataSet Listar(BEGrupo pbe)
        {
            return _dlGrupo.Listar(pbe);
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupo Obtener(BEGrupo pbe)
        {
            //return _dl.Obtener(pbe);

            BEGrupo beRe = new BEGrupo();
            beRe = _dlGrupo.Obtener(pbe);

            //Obtiene los Conceptos
            BEConcepto beConcepto = new BEConcepto();
            beConcepto.IdGrupo = pbe.IdGrupo;
            
            return beRe;
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupo Insertar(BEGrupo pbe)
        {
            //return _dl.Insertar(pbe);
            BEGrupo beRe = new BEGrupo();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupo.Transaction = _transaccion;
                _dlConcepto.Transaction = _transaccion;
              
                //Valores definidos
                beRe.Codigo = "";

                beRe = _dlGrupo.Insertar(pbe);

                //Insertar el Detalle
                if (pbe.Conceptos != null)
                {
                    foreach (BEConcepto be in pbe.Conceptos)
                    {
                       be.IdGrupo = beRe.IdGrupo;
                        _dlConcepto.Insertar(be);
                    }
                }
                
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beRe;
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupo Actualizar(BEGrupo pbe)
        {
            //return _dl.Actualizar(pbe);
            BEGrupo beGrupo = new BEGrupo();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupo.Transaction = _transaccion;
                _dlConcepto.Transaction = _transaccion;
                

                //Valores definidos
                beGrupo.Codigo = "";

                beGrupo = _dlGrupo.Actualizar(pbe);

                //Actualiza el Detalle
                if (pbe.Conceptos != null)
                {
                    foreach (BEConcepto be in pbe.Conceptos)
                    {
                       be.IdGrupo = pbe.IdGrupo;
                        _dlConcepto.Modificar(be);
                    }
                }
               
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beGrupo;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupo Eliminar(BEGrupo pbe)
        {
            //return _dl.Eliminar(pbe);
            BEGrupo beGrupo = new BEGrupo();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupo.Transaction = _transaccion;
                _dlConcepto.Transaction = _transaccion;
              
                beGrupo = _dlGrupo.Eliminar(pbe);

                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beGrupo;
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupo ImportarConcepto(BEGrupo pbe)
        {
            return _dl.ImportarConcepto(pbe);
        }
    }

   
}
